/**
* Copyright (c) 2012 Vinayak Solutions Private Limited
* See the file license.txt for copying permission.
*/
package com.vinsol.expensetracker;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.flurry.android.FlurryAgent;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;
import com.vinsol.expensetracker.helpers.ConvertCursorToListString;
import com.vinsol.expensetracker.helpers.CustomDatePickerDialog;
import com.vinsol.expensetracker.helpers.DisplayDate;
import com.vinsol.expensetracker.helpers.StringProcessing;
import com.vinsol.expensetracker.models.Entry;
import com.vinsol.expensetracker.utils.Log;
public class GenerateReport extends BaseActivity implements OnClickListener {
private Spinner period;
private Spinner typeSpinner;
private int mStartYear;
private int mStartMonth;
private int mStartDay;
private int mEndYear;
private int mEndMonth;
private int mEndDay;
private TextView customStartDateTextView;
private TextView customEndDateTextView;
private Calendar endCalendar;
private Calendar startCalendar;
private AsyncTask<Void, Void, Void> exportPDF;
private AsyncTask<Void, Void, Void> exportCSV;
private File fileLocation;
private String dateRange;
private List<Entry> mEntryList;
private final int REQUEST_CODE = 1055;
@Override
protected void onStart() {
super.onStart();
FlurryAgent.onStartSession(this, getString(R.string.flurry_key));
}
@Override
protected void onStop() {
super.onStop();
FlurryAgent.onEndSession(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.generate_report);
((Button)findViewById(R.id.export_button)).setOnClickListener(this);
customStartDateTextView = (TextView)findViewById(R.id.custom_start_date);
customStartDateTextView.setOnClickListener(this);
customEndDateTextView = (TextView)findViewById(R.id.custom_end_date);
customEndDateTextView.setOnClickListener(this);
period = (Spinner) findViewById(R.id.period_spinner);
typeSpinner = (Spinner) findViewById(R.id.type_spinner);
typeSpinner.setOnItemSelectedListener(typeSpinnerListener);
period.setOnItemSelectedListener(periodListener);
FlurryAgent.onEvent(getString(R.string.generate_report_activity));
//set default end day values
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
mEndYear = calendar.get(Calendar.YEAR);
mEndMonth = calendar.get(Calendar.MONTH);
mEndDay = calendar.get(Calendar.DAY_OF_MONTH);
mEntryList = new ConvertCursorToListString(GenerateReport.this).getEntryList(true, "");
if(mEntryList.size() == 0) {
new AlertDialog.Builder(this)
.setTitle("Error")
.setCancelable(false)
.setMessage("No Record to Generate Report, Please add some")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.show();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.export_button:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
if(mEntryList.size() <= 5000) {
if(setStartEndDate()) {
Log.d("**************Exporting Range****************");
Log.d("Start Date "+mStartDay+" "+(mStartMonth+1)+" "+mStartYear);
Log.d("End Date "+mEndDay+" "+(mEndMonth+1)+" "+mEndYear);
Log.d("******************************");
switch ((int)typeSpinner.getSelectedItemId()) {
//case if Exporting to PDF
case 0:
exportToPDF();
break;
//case if Exporting to CSV
case 1:
exportToCSV();
break;
default:
break;
}
}
} else {
new AlertDialog.Builder(this)
.setTitle("Error")
.setMessage("Too many Records, Please select fewer")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(getString(R.string.ok), (DialogInterface.OnClickListener)null)
.show();
}
} else {
Toast.makeText(this, "sdcard not available", Toast.LENGTH_LONG).show();
}
break;
case R.id.custom_start_date:
new CustomDatePickerDialog(this, mStartDateSetListener, customStartDateTextView).show();
break;
case R.id.custom_end_date:
new CustomDatePickerDialog(this, mEndDateSetListener, customEndDateTextView).show();
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE) {
finish();
}
}
private void exportToCSV() {
exportCSV = new ExportToCSV().execute();
}
private abstract class Export extends AsyncTask<Void, Void, Void> {
protected ProgressDialog progressDialog;
protected Double totalAmount = 0.0;
protected boolean isAmountNotEntered = false;
protected boolean isRecordAdded = false;
protected int totalNumberOfRecordsAdded;
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(GenerateReport.this);
progressDialog.setCancelable(false);
progressDialog.setTitle("Exporting Report");
progressDialog.setMessage("Please Wait...");
progressDialog.show();
}
@Override
protected void onPostExecute(Void result) {
progressDialog.cancel();
if(!isRecordAdded) {
fileLocation.delete();
new AlertDialog.Builder(GenerateReport.this)
.setTitle("Error")
.setMessage("No Record within range to generate report")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(getString(R.string.ok), (DialogInterface.OnClickListener)null)
.show();
} else {
addFlurryEvent(totalNumberOfRecordsAdded);
final PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(fileLocation));
List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
if (resolveInfo.size() > 0) {
Toast.makeText(GenerateReport.this, "Report Exported to - "+getShowLocation(), Toast.LENGTH_LONG).show();
startActivityForResult(intent, REQUEST_CODE);
} else {
new AlertDialog.Builder(GenerateReport.this)
.setMessage(getType()+" Viewer not found, Generated report saved at "+getShowLocation())
.setTitle("Report Generated")
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setIcon(android.R.drawable.ic_dialog_info)
.show();
}
}
}
protected void addFlurryEvent(int srNo) {
Map<String, String> recordType = new HashMap<String, String>();
recordType.put("Total Records", +srNo+"");
recordType.put("Type Spinner", getType());
recordType.put("Date Range",dateRange);
recordType.put("Period Spinner", period.getSelectedItem()+"");
FlurryAgent.onEvent(getString(R.string.generate_report), recordType);
}
protected String getShowLocation(){
return fileLocation.toString().replaceAll("/mnt", "");
}
protected abstract String getType();
protected void setFile() {
File dir = new File(Environment.getExternalStorageDirectory()+"/ExpenseTracker");
if(!dir.exists()) {dir.mkdirs();}
fileLocation = new File(dir, getFileName());
}
protected String getFileName() {
return (dateRange+"("+Calendar.getInstance().getTimeInMillis()+")").replaceAll(" ", "");
}
protected boolean isDateValid(Long timeInMillis) {
Calendar mCalendar = Calendar.getInstance();
mCalendar.setTimeInMillis(timeInMillis);
mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(mStartYear, mStartMonth, mStartDay, 0, 0, 0);
startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(mEndYear, mEndMonth, mEndDay, 0, 0, 0);
endCalendar.setFirstDayOfWeek(Calendar.MONDAY);
if(mStartDay == mCalendar.get(Calendar.DAY_OF_MONTH) && mStartMonth == mCalendar.get(Calendar.MONTH) && mStartYear == mCalendar.get(Calendar.YEAR)) {return true;}
if(mEndDay == mCalendar.get(Calendar.DAY_OF_MONTH) && mEndMonth == mCalendar.get(Calendar.MONTH) && mEndYear == mCalendar.get(Calendar.YEAR)) {return true;}
if(mCalendar.after(startCalendar) && mCalendar.before(endCalendar)) {return true;}
return false;
}
protected String getDescriptionIfNotPresent(String type) {
if(type.equals(getString(R.string.unknown))) {
return getString(R.string.unknown_entry);
} else if(type.equals(getString(R.string.text))) {
return getString(R.string.finished_textentry);
} else if(type.equals(getString(R.string.voice))) {
return getString(R.string.finished_voiceentry);
} else if(type.equals(getString(R.string.camera))) {
return getString(R.string.finished_cameraentry);
}
return "";
}
}
private class ExportToCSV extends Export {
private Writer writer;
@Override
protected Void doInBackground(Void... params) {
setFile();
try {
writer = new BufferedWriter(new FileWriter(fileLocation));
addContent();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected String getFileName() {
return super.getFileName()+".csv";
}
private void addContent() throws IOException {
writer.write("Sr. No.,");
writer.write("Date,");
writer.write("Location,");
writer.write("Description,");
writer.write("Amount\n");
addDataToTable();
}
private void addDataToTable() throws IOException{
int srNo = 0;
for(int i=0 ; i < mEntryList.size() ; i++) {
Entry entry = mEntryList.get(i);
if(!isDateValid(entry.timeInMillis)) {continue;}
// Adding Serial Number
srNo++;
writer.write((srNo)+",");
// Adding date
writer.write(new DisplayDate().getDisplayDateReport(entry.timeInMillis).replaceAll(",", " ")+",");
// Adding location
if(entry.location != null && !entry.location.equals("")) {
writer.write(entry.location.replaceAll(",", " ")+",");
} else {
writer.write(getString(R.string.unknown_location).replaceAll(",", " ")+",");
}
// Adding description
if(entry.description != null && !entry.description.equals("")) {
writer.write(entry.description.replaceAll(",", " ")+",");
} else {
writer.write(getDescriptionIfNotPresent(entry.type).replaceAll(",", " ")+",");
}
// Adding Amount
if(entry.amount != null && !entry.amount.equals("") && !entry.amount.contains("?")) {
totalAmount = totalAmount + Double.parseDouble(entry.amount);
writer.write(new StringProcessing().getStringDoubleDecimal(entry.amount).replaceAll(",", " ")+"\n");
} else {
isAmountNotEntered = true;
writer.write("?"+"\n");
}
isRecordAdded = true;
}
totalNumberOfRecordsAdded = srNo;
addTotalAmountRow();
}
private void addTotalAmountRow() throws IOException{
// Adding Serial Number
writer.write(",");
// Adding date
writer.write(",");
// Adding location
writer.write(",");
// Adding description
writer.write("Total Amount,");
// Adding Amount
if(isAmountNotEntered) {
writer.write(new StringProcessing().getStringDoubleDecimal(totalAmount+"").replaceAll(",", " ")+" ?\n");
} else {
writer.write(new StringProcessing().getStringDoubleDecimal(totalAmount+"").replaceAll(",", " ")+"\n");
}
}
@Override
protected String getType() {
return "CSV";
}
}
private void exportToPDF() {
exportPDF = new ExportPDF().execute();
}
private class ExportPDF extends Export {
private Font catFont;
private Font subFont;
private Font tableHeader;
private Font small;
private PdfWriter writer;
@Override
protected Void doInBackground(Void... params) {
catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD);
subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.NORMAL);
tableHeader = new Font();
tableHeader.setStyle(Font.BOLD);
small = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
Document document = new Document();
setFile();
try {
writer = PdfWriter.getInstance(document, new FileOutputStream(fileLocation));
writer.setPageEvent(new HeaderAndFooter());
document.open();
addMetaData(document);
addContent(document);
document.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
@Override
protected String getFileName() {
return super.getFileName()+".pdf";
}
private void addTable(Document document) throws DocumentException {
PdfPTable table = new PdfPTable(5);
table.setWidthPercentage(90);
table.getDefaultCell().setPadding(5.0F);
float totalWidth = ((table.getWidthPercentage()*writer.getPageSize().getWidth())/100);
float widths[] = {totalWidth/10,totalWidth/5,totalWidth/5,(3*totalWidth)/10,totalWidth/5};
table.setWidths(widths);
PdfPCell c1 = new PdfPCell(new Phrase("Sr. No.",tableHeader));
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Date",tableHeader));
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Location",tableHeader));
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Description",tableHeader));
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Amount",tableHeader));
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
table.setHeaderRows(1);
table.setSplitRows(true);
addDataToTable(table,document);
}
private void addTitle(Document document) throws DocumentException{
Paragraph preface = new Paragraph();
// We add one empty line
addEmptyLine(preface, 1);
// Lets write a big header
preface.setAlignment(Element.ALIGN_CENTER);
preface.add(new Paragraph("Expenses Report", catFont));
addEmptyLine(preface, 1);
document.add(preface);
}
private void addContent(Document document) throws DocumentException {
addTitle(document);
addDateRange(document);
addTable(document);
}
private void addDateRange(Document document) throws DocumentException {
Paragraph preface = new Paragraph();
preface.setAlignment(Element.ALIGN_CENTER);
preface.add(new Paragraph(dateRange, subFont));
addEmptyLine(preface, 2);
document.add(preface);
}
// add metadata to the PDF which can be viewed in your Adobe Reader
// under File -> Properties
private void addMetaData(Document document) {
document.addTitle("Expenses Report using Expense Tracker (Vinsol)");
document.addSubject("PDF created using android app \"Expense Tracker (Vinsol)\"");
document.addKeywords("Android, PDF, Vinsol, Expense, Tracker, Expense Tracker");
document.addAuthor("Vinsol");
document.addCreator("Vinsol");
}
private void addDataToTable(PdfPTable table, Document document) throws DocumentException{
int srNo = 0;
for(int i=0 ; i < mEntryList.size() ; i++) {
Entry entry = mEntryList.get(i);
if(!isDateValid(entry.timeInMillis)) {continue;}
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
// Adding Serial Number
srNo++;
table.addCell((srNo)+"");
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
// Adding date
table.addCell(new DisplayDate().getDisplayDateReport(entry.timeInMillis));
// Adding location
if(entry.location != null && !entry.location.equals("")) {
table.addCell(entry.location);
} else {
table.addCell(getString(R.string.unknown_location));
}
// Adding description
if(entry.description != null && !entry.description.equals("")) {
table.addCell(entry.description);
} else {
table.addCell(getDescriptionIfNotPresent(entry.type));
}
// Adding Amount
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
if(entry.amount != null && !entry.amount.equals("") && !entry.amount.contains("?")) {
totalAmount = totalAmount + Double.parseDouble(entry.amount);
table.addCell(new StringProcessing().getStringDoubleDecimal(entry.amount));
} else {
isAmountNotEntered = true;
table.addCell("?");
}
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
isRecordAdded = true;
if((i+1) % 500 == 0) {
document.add(table);
table.flushContent();
}
}
totalNumberOfRecordsAdded = srNo;
addTotalAmountRow(table);
document.add(table);
table.flushContent();
}
private void addTotalAmountRow(PdfPTable table) {
// Adding Serial Number
table.addCell("");
// Adding date
table.addCell("");
// Adding location
table.addCell("");
// Adding description
table.addCell("Total Amount");
// Adding Amount
if(isAmountNotEntered) {
table.addCell(new StringProcessing().getStringDoubleDecimal(totalAmount+"")+" ?");
} else {
table.addCell(new StringProcessing().getStringDoubleDecimal(totalAmount+"")+"");
}
}
private void addEmptyLine(Paragraph paragraph, int number) {
for (int i = 0; i < number; i++) {
paragraph.add(new Paragraph(" "));
}
}
public class HeaderAndFooter extends PdfPageEventHelper {
protected PdfPTable footer;
public HeaderAndFooter() {
footer = new PdfPTable(1);
footer.setTotalWidth(220);
footer.getDefaultCell().setBorderWidth(0);
footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
Chunk chunk = new Chunk("Report Generated Using - Expense Tracker (Vinsol)");
chunk.setAction(new PdfAction(PdfAction.FIRSTPAGE));
chunk.setFont(small);
footer.addCell(new Phrase(chunk));
}
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
footer.writeSelectedRows(0, -1,(document.right() - document.left() - 200)+ document.leftMargin(), document.bottom() - 10, cb);
}
}
@Override
protected String getType() {
return "PDF";
}
}
private boolean setStartEndDate() {
endCalendar = Calendar.getInstance();
endCalendar.set(endCalendar.get(Calendar.YEAR), endCalendar.get(Calendar.MONTH), endCalendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
endCalendar.setFirstDayOfWeek(Calendar.MONDAY);
startCalendar = (Calendar) endCalendar.clone();
switch ((int)period.getSelectedItemId()) {
//case if period is 1 Month
case 0:
startCalendar.add(Calendar.MONTH, -1);
startCalendar.add(Calendar.DAY_OF_MONTH, +1);
setDateParameters(startCalendar,endCalendar);
return true;
//case if period is 1 Quarter
case 1:
startCalendar.add(Calendar.MONTH, -3);
startCalendar.add(Calendar.DAY_OF_MONTH, +1);
setDateParameters(startCalendar,endCalendar);
return true;
//case if period is Half Year
case 2:
startCalendar.add(Calendar.MONTH, -6);
startCalendar.add(Calendar.DAY_OF_MONTH, +1);
setDateParameters(startCalendar,endCalendar);
return true;
//case if period is 1 Year
case 3:
startCalendar.add(Calendar.YEAR, -1);
startCalendar.add(Calendar.DAY_OF_MONTH, +1);
setDateParameters(startCalendar,endCalendar);
return true;
//case if period is Custom
case 4:
return checkStartEndDate(true);
default:
return false;
}
}
private void setDateParameters(Calendar startCalendar, Calendar endCalendar) {
mEndYear = endCalendar.get(Calendar.YEAR);
mEndMonth = endCalendar.get(Calendar.MONTH);
mEndDay = endCalendar.get(Calendar.DAY_OF_MONTH);
mStartYear = startCalendar.get(Calendar.YEAR);
mStartMonth = startCalendar.get(Calendar.MONTH);
mStartDay = startCalendar.get(Calendar.DAY_OF_MONTH);
dateRange = new DisplayDate().getDisplayDateReport(startCalendar)+" - "+new DisplayDate().getDisplayDateReport(endCalendar);
}
private OnItemSelectedListener periodListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
if(id == 4) {
((TextView)findViewById(R.id.daterange_textview)).setVisibility(View.GONE);
((LinearLayout)findViewById(R.id.custom_date_layout)).setVisibility(View.VISIBLE);
} else {
setStartEndDate();
TextView dateRangeView = (TextView) findViewById(R.id.daterange_textview);
dateRangeView.setVisibility(View.VISIBLE);
dateRangeView.setText(dateRange);
((LinearLayout)findViewById(R.id.custom_date_layout)).setVisibility(View.GONE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//do nothing
}
};
private OnItemSelectedListener typeSpinnerListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
if(id == 0) {
findViewById(R.id.type_message_textview).setVisibility(View.GONE);
} else {
findViewById(R.id.type_message_textview).setVisibility(View.VISIBLE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//do nothing
}
};
private CustomDatePickerDialog.OnDateSetListener mStartDateSetListener = new CustomDatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
mStartYear = year;
mStartMonth = monthOfYear;
mStartDay = dayOfMonth;
Calendar mCalendar = Calendar.getInstance();
mCalendar.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
((TextView)findViewById(R.id.custom_start_date)).setText(new DisplayDate(mCalendar).getDisplayDate());
checkStartEndDate(false);
}
};
private CustomDatePickerDialog.OnDateSetListener mEndDateSetListener = new CustomDatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
mEndYear = year;
mEndMonth = monthOfYear;
mEndDay = dayOfMonth;
Calendar mCalendar = Calendar.getInstance();
mCalendar.set(year, monthOfYear, dayOfMonth, 0, 0, 0);
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
((TextView)findViewById(R.id.custom_end_date)).setText(new DisplayDate(mCalendar).getDisplayDate());
checkStartEndDate(false);
}
};
private boolean checkStartEndDate(boolean isToShowToast) {
if(customEndDateTextView.getText().toString().equals("") || customStartDateTextView.getText().toString().equals("")) {
if(isToShowToast) {
new AlertDialog.Builder(GenerateReport.this)
.setTitle("Error")
.setMessage("Set Start Date and End Date before exporting")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(getString(R.string.ok), (DialogInterface.OnClickListener)null)
.show();
}
return false;
}
if(!isCombinationCorrect()) {
new AlertDialog.Builder(GenerateReport.this)
.setTitle("Error")
.setMessage("End Date must be greater than Start Date")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(getString(R.string.ok), (DialogInterface.OnClickListener)null)
.show();
return false;
}
dateRange = new DisplayDate().getReportDateRange(mStartDay, mStartMonth, mStartYear, mEndDay, mEndMonth, mEndYear);
return true;
}
private boolean isCombinationCorrect() {
if(mStartDay == mEndDay && mStartMonth == mEndMonth && mEndYear == mStartYear) {return true;}
if(mStartYear > mEndYear) {return false;}
if(mStartYear == mEndYear && mStartMonth > mEndMonth) {return false;}
if(mStartYear == mEndYear && mStartMonth == mEndMonth && mStartDay > mEndDay) {return false;}
return true;
}
@Override
protected void onPause() {
if(exportPDF != null && (exportPDF.getStatus().equals(AsyncTask.Status.RUNNING) || exportPDF.getStatus().equals(AsyncTask.Status.PENDING))) {
exportPDF.cancel(true);
Toast.makeText(this, "PDF Report Exporting Cancelled", Toast.LENGTH_LONG).show();
}
if(exportCSV != null && (exportCSV.getStatus().equals(AsyncTask.Status.RUNNING) || exportCSV.getStatus().equals(AsyncTask.Status.PENDING))) {
exportCSV.cancel(true);
Toast.makeText(this, "CSV Report Exporting Cancelled", Toast.LENGTH_LONG).show();
}
super.onPause();
}
}